package tech.aistar.design.proxy.demo2;

import tech.aistar.design.proxy.demo1.UserDao;
import tech.aistar.design.proxy.demo1.UserDaoImpl;

import java.lang.reflect.Proxy;

/**
 * 本类用来演示: 动态代理的测试
 *
 * @author: success
 * @date: 2022/8/4 3:13 下午
 */
public class ProxyHandlerTest {
    public static void main(String[] args) {
        //1. 目标对象
        UserDao userDao = new UserDaoImpl();

        //2. 创建handler对象
        ProxyHandler proxyHandler = new ProxyHandler(userDao);

        //3. 反射创建userDao的代理对象
        UserDao proxy = (UserDao) Proxy.newProxyInstance(
                userDao.getClass().getClassLoader(),
                userDao.getClass().getInterfaces(),
                proxyHandler
        );

        //class com.sun.proxy.$Proxy0
        //System.out.println(proxy.getClass());

        //通过代理对象来访问方法
        //作用:通过代理对象来访问目标对象中的方法的时候,自动进入到handler中的 invoke去执行
        System.out.println(proxy.add(10, 5));
    }
}
